<?php

namespace App\Http\Controllers\Admin;

use App\Models\Role;
use App\Models\User;
use Hash;
use Illuminate\Http\Request;
use Illuminate\Mail\Message;
use Mail;

class UserController extends BaseController
{

    //用户列表展示
    public function index(){
        //withTrashed 查询出包括被软删除的数据
        $data = User::withTrashed()->orderBy('id','asc')->paginate($this->pagesize);
        return view('admin.user.index',compact('data'));
    }
    //添加用户显示
    public function create(){
        return view('admin.user.create');
    }
    //添加用户操作
    public function store(Request $request){
       //对数据进行验证
//        $this->validate($request,[
//            'username' => 'required',
//            'truename' => 'required',
//            'password' => 'required',
//            'phone' => 'nullable|phone'
//        ],[
//            'phone.phone' => '手机号码不合法'
//        ]);

        //第二种数据验证的方式
        $this->validate($request,[
            //用户名验证唯一性
            'username' => 'required|unique:users,username',
            'truename' => 'required',
            //两次密码是否一致的验证
            'password' => 'required|confirmed',
            //自定义验证规则
            'phone' => 'required|phone'
        ]);
        //除了_token 和 password_confirmation之外的所有数据都传递过来
        $post = $request->except(['_token','password_confirmation']);
        $password = $post['password'];
        $post['password'] = bcrypt($post['password']);
        //添加用户入库
        $userModel = User::create($post);
        //当给用户发送邮件的时候，要把密码给邮件
        //在用户添加成功之后发送邮件
        //在匿名函数中使用变量  
        Mail::send('mail.useradd',compact('userModel','password'),function(Message $message) use ($userModel){
            //发送给谁
            $message->to($userModel->email);
            $message->subject("恭喜你，注册成功");
        });

        //跳转到列表页   
        return redirect(route('admin.user.create'))->with('success','添加成功');
        
    }


    //删除用户
    public function del(int $id){
        //删除
        //当设置了软删除之后，就不能真正的进行删除数据操作了
        User::find($id)->delete();
        //强制删除，在配置了软删除的时候，真实的删除操作
        return ['status'=>0,'msg'=>'删除成功'];
    }

    //还原
    public function restore(int $id){
        //还原，只显示已删除的数据
        User::onlyTrashed()->where('id',$id)->restore();
        return ['status'=>0,'msg'=>'还原成功'];
    }

    //批量删除用户
    public function delall(Request $request){
        $ids = $request->get('ids');
        User::destroy($ids);
        return ['status'=>0,'msg'=>'删除成功'];
    }


    //修改用户显示
    public function edit(int $id){
        $model = User::find($id);
        return view('admin.user.edit',compact('model'));
    }

    //修改用户信息  【这里只是修改基本信息】
    //
    public function update(Request $request,int $id){
        $model = User::find($id);
        //直接进行修改操作
        $data = $request->only([
            'truename',
            'phone',
            'sex',
            'email'
        ]);
        $save = $model->update($data);
        if($save){
            return redirect(route('admin.user.edit', $model))->with('success', '修改用户成功');
        }else{
            return redirect(route('admin.user.edit',$model))->withErrors(['error'=>'修改失败']);
        }
    }

    //修改个人信息显示
    public function editPerson(int $id){
        $model = User::find($id);
        return view('admin.user.editPerson',compact('model'));
    }

    //修改个人信息操作
    public function updatePerson(Request $request,int $id){
        $model = User::find($id);
        //原密码，明文的
        $spass = $request->get('spassword');
        //原密码 密文的
        $oldpass = $model->password;
        //检查明文密码和密文密码是否一致
        $bool = Hash::check($spass,$oldpass);
        if($bool){
            //如果密码，匹配成功了，就进行修改工作
            $data = $request->only([
                'truename',
                'password',
                'phone',
                'sex',
                'email'
            ]);
            //如果传递过来的密码不为空的话，就对密码进行加密并且进行插入操作
            if(!empty($data['password'])){
                $data['password'] = bcrypt($data['password']);
            }else{
                //如果传递过来的密码是为空的话，就不需要入库了
                unset($data['password']);
            }
            $model->update($data);
            return redirect(route('admin.user.editPerson',$model))->with('success','修改成功');
        }else{
            return redirect(route('admin.user.editPerson',$model))->withErrors(['error'=>'原始密码不正确']);
        }
    }


    //分配角色和处理 
    //
    public function role(Request $request,User $user){
        //判断是否是post提示
        if($request->isMethod('post')){
            $post = $this->validate($request,[
                'role_id' => 'required'
            ],['role_id.required' => '必须选择']);
            $user->update($post);
        }
        //读取出所有角色
        $roleAll = Role::get();
        return view('admin.user.role',compact('user','roleAll'));
    }
	
	
	

	

	

}
